Microcontrollers are often used in computing and electronics, especially for controlling various small electronic devices. A microcontroller is often referred to as “a computer on a chip.” In other words, it is usually a single chip which includes a generally programmable processor as well as various memories and interfaces required to allow the generally programmable processor to operate. A microcontroller may thus be compared to a computer which usually requires several chips placed on a board (some times referred to as motherboard) to achieve the functionality of a microcontroller.
For efficiency reasons, many microcontrollers include at least one serial interface. While serial interfaces can be slower, they may be more efficient as they require fewer pins.
Many microcontrollers require a boot-up process when initially powered up. The boot-up process allows a microcontroller to perform various actions to prepare the microcontroller for ordinary operation, such as load initialization values in its registers, load instructions in its instruction memory, etc.
Some microcontrollers include on board non-volatile memory, such as read-only memory (ROM), which is used in the boot up process. More specifically, the microcontroller loads initial register values, instructions etc., from the internal ROM.
However, use of internal ROM to store boot up information may be undesirable in that it prevents changes and modifications from being made to the microcontroller's boot operation. For example, changing the initial value of one register would require changing the entire microcontroller, which can be expensive, especially if a number of microcontrollers with the old register value have already been manufactured. Thus, removing errors in a microcontroller's boot operation becomes difficult if all boot data of a microcontroller is stored internally in a ROM.
However, storing the boot data outside of the microcontroller poses other difficulties. Namely, the boot data must be sent to the microcontroller during a boot operation. This can take a long time, especially if a serial interface to the microcontroller is used. A time consuming boot sequence is generally undesirable, especially if the microcontroller is used for a consumer device, because it gives the impression that the device is slow and lacks computational power.